#ifndef PLAN_H_
#define PLAN_H_

#include <cmath>
#include <vector>

#include "interface/common.h"

/**
 * PlanInterface类是一个抽象接口类，用于规划路径。
 * 它定义了一个静态创建方法和一个纯虚路径规划方法。
 */
class PlanInterface {
public:
    /**
     * 创建PlanInterface的实例。
     *
     * @param grid 一个二维向量，表示地图网格，栅格:1:普通仓位；2:交叉口; 8:障碍物。
     * @return 返回PlanInterface的实例指针。
     */
    static PlanInterface* create(std::vector<std::vector<int>>& grid);

    /**
     * 以列遍历的方式，生成全图弓字路径
     *
     * @param start 起点的坐标
     * @return 返回一个Path对象的vector，表示路径规划
     */
    virtual std::vector<Path> makePlan(Point start) = 0;

    /**
     * 虚拟路径规划方法，需要由子类实现。
     *
     * @param start 起始点的坐标。
     * @param goals 目标点坐标的集合。
     * @return 返回一个Path对象的向量，表示规划的路径。
     */
    virtual std::vector<Path> makePlan(Point start, std::vector<Point> goals) = 0;
};

#endif